package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.lang.reflect.Method;

/*
Spring核心框架，是一个Bean容器，帮我们管理项目中使用到的类
 */
public class Demo {
    public static void main(String[] args) throws Exception {
        /*
        1.
         */
        Person p1=new Person();
        p1.sayHello();
        /*
        2.反射机制
         */
        Class c= Person.class;
        Object p2=c.newInstance();
        Method m=c.getMethod("sayHello");
        m.invoke(p2);
        /*
        3.使用Spring容器
         */
        /*
        使用容器后，有一个模式发生了改变，就是当我们需要使用到一个类的实例时，从
            原本我们主动实例化(无论是硬编码还是反射)现在转变为向容器"要"对象使用。

            这种转变:
            原来，我们使用谁，实例化谁这个操作的控制代码由我们自己编写。
            现在转变为向容器要，这意味着对象的实例化(对象的初始化)的控制由容器来完成。
            这就是 IoC(控制反转)。
         */
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext("demo1");
        Person p3=context.getBean(Person.class);
        p3.sayHello();
    }
}
